const express = require('express');
const app = express();

/**
 * 解析post请求的body数据
 */
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false}));

/**
 * 跨域请求配置
 */
const cors = require('cors');
app.use(cors());

/**
 * 解析token认证校验是否正确，哪些接口需要token校验
 */
const expressJwt = require('express-jwt');
const { jwtSecreKey} = require('./config/jwtSecreKey')

app.use(expressJwt({secret: jwtSecreKey, algorithms: ['HS256']}).unless({path:['/api/v1/user/register', '/api/v1/user/login', '/api/v1/front/columnSearch', '/api/v1/front/contentList', '/api/v1/front/contentListOne','/api/v1/columnInformation/addColumnList','/api/v1/contentInformation/addContentList'] }))

/**
 * 用户相关的接口
 */
const userRouter = require('./router/user');
app.use('/api/v1/user', userRouter);

/**
 * 用户管理页相关的接口
 */
const userInformationRouter = require('./router/userinformations');
app.use('/api/v1/userInformation', userInformationRouter);

/**
 * 栏目管理页相关的接口
 */
const columnInformationRouter = require('./router/columnInformations');
app.use('/api/v1/columnInformation', columnInformationRouter);

/**
 * 内容管理页相关的接口
 */
const contentInformationRouter = require('./router/contentInformations');
app.use('/api/v1/contentInformation', contentInformationRouter);

/**
 * 前端
 */
const front = require('./router/frontList');
app.use('/api/v1/front', front);
/**
 * 
 * 错误中间件
 */
const joi = require('joi');
app.use(function( err, req, res, next) {
    // joi表单的用户信息校验失败
    if(err instanceof joi.ValidationError) {
        return res.send({
            code: 1,
            message: err.message,
        })
    }

    // token身份验证
    if(err.name === 'UnauthorizedError') {
        return res.send({
            code: 1,
            message: '身份认证失败',
        })
    }
    // 其他的错误
    res.send({
        code:1,
        message: err.message
    })
})
app.listen(3000, () => {
    console.log('服务器启动在:：http://127.0.0.1:3000');
});